package serveurs;
/**
 *  GedClasses
 *
 *
 * @author Peloux Arnaud</a>
 * @version 1.0
 */

import java.util.Vector; //thread Safe

public class GedClasses {
	/**
	 * Attributs 
	 */
	private Vector<GedDocs> mesDocs;
	private Vector<String> nomAttributs, typeAttributs;
	private String name, uid, uidProprietaire;
	private int nbAttributs;
	 

	/**
	 * Constructeurs
	 */

	public GedClasses(String name, String uid, String uidProprietaire, String [] attributs){
		this.uid=uid;
		this.name=name;
		this.uidProprietaire = uidProprietaire;
		this.nomAttributs = new Vector<String>(); 
		this.typeAttributs = new Vector<String>();
		if(attributs!=null){
			for (int i=0; i<attributs.length;i=i+2){
				this.nomAttributs.add(attributs[i]);
				this.typeAttributs.add(attributs[i+1]);}}
		else {
			this.nbAttributs=0;}
		mesDocs = new Vector<GedDocs>(); //création pour nouvelle classe d'un tableau d'aucun document
	
	}
	
	/**
	 * Accesseurs
	 */
	
	public String getName(){
		return name;
	}
	public void setName(String name){
		this.name=name;
	}	
	public String getUidProprietaire(){
		return uidProprietaire;
	}
	public void setUidProprietaire(String uidProprietaire){
		this.uidProprietaire=uidProprietaire;
	}
	public GedDocs getGedDocs(String uid){
		
		for (int i=0; i<mesDocs.size();i++){
			
			if(uid.equalsIgnoreCase(mesDocs.get(i).getUid())){
				return mesDocs.get(i);
				
			}
		}
		
		return null;
	}	
	public GedDocs getGedDocs(int index){
		if (index>getnbDocs())return null;
		return mesDocs.get(index);
	}
	public GedDocs getGedDocsParNom(String nom){
		for (int i=0;i<mesDocs.size();i++){
			if (mesDocs.get(i).getNom().equalsIgnoreCase(nom))
				return mesDocs.get(i);
		}
		return null;
	}	
	public int getnbDocs(){
		return mesDocs.size();
	}
	public String getUid(){
		return uid;
	}
	public int getNbAttributs(){
		return nomAttributs.size();
	}
	public String getNomAttributs(int num){
		if(num>getNbAttributs())return null;
		return nomAttributs.get(num);
	}
	public String getTypeAttributs(int num){
		if(num>getNbAttributs())return null;
		return typeAttributs.get(num);
	}
	public boolean setNomAttribut(String nomAttribut, String typeAttribut){
		if(nomAttribut==null |typeAttribut==null ) return false;
		this.nomAttributs.add(nomAttribut);
		this.typeAttributs.add(typeAttribut);
		return true;
	}
	public boolean setAttributs(String uidGedDocs, String uid, String valeur){
		if(! rechercheGedDocsParUid(uidGedDocs)) return false;
		getGedDocs(uidGedDocs).addGedAttributs(uid, valeur);
		return true;
	}
	/**
	 * Méthodes
	 */

	public boolean createGedDoc(String nom,String uidProprietaire){
		// retourne true si le docs est créé
		boolean exist=false;
		int j=1;
		
		if(rechercheGedDocsParNom(nom))
				return false;
		while(exist){
			j++;
			exist=!rechercheGedDocsParUid("D"+j);
			
		}
		
		mesDocs.add(new GedDocs(nom,"D"+j,uidProprietaire));
		
		return true;
	}
	public boolean createGedDoc(String nom,String uid,String uidProprietaire){
		// retourne true si le docs est créé
		
		
		if(rechercheGedDocsParNom(nom)|rechercheGedDocsParUid(uid))
				return false;
		
		
		mesDocs.add(new GedDocs(nom,uid,uidProprietaire));
		
		return true;
	}
	public String deleteGedDoc(int index){
		mesDocs.remove(index);
		
		return "ok";
	}
	public boolean rechercheGedDocsParNom(String nom){
		// retourne true si le fichier existe
		for (int i=0;i<mesDocs.size();i++){
			if (mesDocs.get(i).getNom().equalsIgnoreCase(nom))
				return true;
		}
		return false;
	}

	public boolean rechercheGedDocsParUid(String uid){
		// retourne true si le fichier existe
		for (int i=0;i<mesDocs.size();i++){
			if (mesDocs.get(i).getUid().equalsIgnoreCase(uid))
				return true;
		}
		return false;
	}
	public String[] rechercheDocsParProprietaire(String uidPropietaire){
		// retourne la liste des  uids des docs du propriétaire
		String[] retour,temp=new String[mesDocs.size()];
		int j=0;
		for (int i=0;i<mesDocs.size();i++){
			if (mesDocs.get(i).getUidPropietaire().equalsIgnoreCase(uidPropietaire)){
				temp[j]=mesDocs.get(i).getUid();
				j++;
			}
		}
		retour=new String[j];
		for (int i=0;i<retour.length;i++)
				retour[j]=temp[j];
		return retour;
	}
	
	
}
